﻿// 曹冲养猪.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

/*
http://ybt.ssoier.cn:8088/problem_show.php?pid=1634

https://loj.ac/p/10212

自从曹冲搞定了大象以后，曹操就开始琢磨让儿子干些事业，于是派他到中原养猪场养猪，可是曹冲很不高兴，于是在工作中马马虎虎，
有一次曹操想知道母猪的数量，于是曹冲想狠狠耍曹操一把。

举个例子，假如有 16 头母猪，如果建了 3 个猪圈，剩下 1 头猪就没有地方安家了；
如果建造了 5 个猪圈，但是仍然有 1 头猪没有地方去；
如果建造了 7 个猪圈，还有 2 头没有地方去。
你作为曹总的私人秘书理所当然要将准确的猪数报给曹总，你该怎么办？

【输入】
第一行包含一个整数 n，表示建立猪圈的次数；

接下来 n 行，每行两个整数 ai,bi ，表示建立了 ai个猪圈，有 bi 头猪没有去处。你可以假定 ai,aj 互质。

【输出】
输出仅包含一个正整数，即为曹冲至少养猪的数目。

【输入样例】
3
3 1
5 1
7 2
【输出样例】
16
【提示】
数据范围与提示：

对于全部数据，1≤n≤10,1≤bi≤ai≤1000。
*/



#include <iostream>

using namespace std;


typedef long long LL;

const int N = 20;
int n;
long long m[N], a[N];


// 求x, y，使得ax + by = gcd(a, b)
long long  exgcd(long long  a, long long  b, long long& x, long long& y)
{
    if (!b)
    {
        x = 1; y = 0;
        return a;
    }
    long long  d = exgcd(b, a % b, y, x);
    y -= (a / b) * x;
    return d;
}



int main() {
    cin >> n;
    long long M = 1;
    for (int i = 1; i <= n; i++) {
        cin >> m[i] >> a[i];
        M *= m[i];
    }
    long long res = 0;
    for (int i = 1; i <= n; i++) {
        long long Mi = M / m[i];
        long long t, y;
        long long d = exgcd(Mi,m[i],t,y);
        res = (res + a[i] * Mi%M * t%M)%M;
    }

    cout << (res + M) % M << endl;

    return 0;
}